Toki Tori 2 ~ trigger

Particle Emitter

// all multi-byte types in this file are stored in big-endian
// this was presumably written with the WiiU CPU architecture in mind

// this documentation was made from the Toki Tori 2 Steam Beta,
// and does not match the final release version.
// I don't know if I'll find time to upadte this.

struct particle_unknown_1_t {
    short unknown_1;
    short unknown_2;
    float unknown_3;
    char unknown_4;
};

struct particle_unknown_2_t {
    unsigned int colors[4];
    float unknown_2;
    float unknown_3;
    char unknown_4;
};

struct particle_emitter_t {
    short unknown_1;
    float unknown_2;
    float unknown_3;
    float unknown_4;
    char unknown_5;
    short unknown_6;
    short texture_name_len;
    char texture_name[texture_name_len];    // no null-terminator
    short unknown_9;
    short unknown_11_len;
    particle_unknown_1_t unknown_11[unknown_11_len];
    char unknown_12;
    float unknown_13;
    float unknown_14;
    float accel_x_a;
    float accel_x_b;
    float accel_y_a;
    float accel_y_b;
    char blendmode;     // 0 = alpha, 1 = additive, 2 = subtractive
    char unknown_20;
    float unknown_21;
    float unknown_22;
    float unknown_23;
    char unknown_24;
    float unknown_25;
    char unknown_26;
    float velocity_x_a;
    float velocity_x_b;
    float velocity_y_a;
    float velocity_y_b;
    float lifespan_a;
    float lifespan_b;
    float scale_a;
    float scale_b;
    float unknown_35;
    float unknown_36;
    char unknown_37;
    float unknown_38;
    float unknown_39;
    float unknown_40;
    float unknown_41;
    float unknown_42;
    float unknown_43;
    float unknown_44;
    float unknown_45;
    float unknown_46;
    float unknown_47;
    short unknown_48;
    short unknown_49;
    char unknown_50;
    char has_unknown_52;
    // if (unknown_52 != 0)
    particle_unknown_2_t unknown_52;

    // where a variable has _a and _b, the particle gets a value randomly selected between those two.
    // for example, a particle's velocity_x would be (velocity_x_a + (rand(0.0, 1.0) * (velocity_x_b - velocity_x_a)))
};

struct trigger_file_t {
    unsigned char png_style_header[9];  // 89 50 54 52 47 0D 0A 1A 0A
    int unknown_1;  // always 5?
    short name_len;
    char name[name_len];    // no null-terminator
    int unknown_2;
    short num_emitters;
    particle_emitter_t emitters[num_emitters];
};